package com.wjm.collections;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

/**
 * Data:2022年07月07日
 * Author:wjm
 * Content: Collection(集合)的操作工具类Collections
 *
 *
 * 注意：
 *      copy方法复制的元素会将原集合从第一个的元素开始覆盖掉，而addAll方法可以把新集合的元素加到原集合的末尾
 *
 * Collections工具类常用的方法
 *             static T max(Collection<? extends T> coll)  根据元素的自然顺序，返回给定 collection 的最大元素。
 *             static T min(Collection<? extends T> coll) 根据元素的自然顺序 返回给定 collection 的最小元素。
 *
 *             static void fill(List<? super T> list, T obj) 使用指定元素替换指定列表中的所有元素。
 *             static boolean replaceAll(List<T> list, T oldVal, T newVal)  使用另一个值替换列表中出现的所有某一指定值。
 *             static <T> void copy(List<? super T> dest, List<? extends T> src) 将所有元素从一个列表复制到另一个列表。
 *             static <T> boolean addAll(Collection<? super T> c, T... elements) 将所有指定元素添加到指定 collection 中。
 *
 *             static void reverse(List<?> list) 反转指定列表中元素的顺序。
 *             static void shuffle(List<?> list) 使用默认随机源对指定列表进行置换。
 *             static void shuffle(List<?> list, Random rnd) 使用指定的随机源对指定列表进行置换。
 *
 *             static void sort(List<T> list) 根据元素的自然顺序 对指定列表按升序进行排序。
 *             static void sort(List<T> list, Comparator<? super T> c) 根据指定比较器产生的顺序对指定列表进行排序。
 *             static void swap(List<?> list, int i, int j) 在指定列表的指定位置处交换元素。
 *
 *             static List<T> synchronizedList(List<T> list) 返回指定列表支持的同步（线程安全的）列表。
 *             static Map<K,V> synchronizedMap(Map<K,V> m) 返回由指定映射支持的同步（线程安全的）映射。
 *             static Set<T> synchronizedSet(Set<T> s) 返回指定 set 支持的同步（线程安全的）set。
 *
 */
public class CollectionsDemo {
    public static void main(String[] args) {
        //创建集合对象
        List<Integer> list = new ArrayList<>();

        //Collections工具类添加元素 addAll()
        Collections.addAll(list,1,5,8,3,6,9);
        System.out.println(list);

        //将集合元素反转输出（倒序输出） reverse()
        Collections.reverse(list);
        System.out.println("------------------------------------");
        System.out.println(list);

        //使用另一个值替换列表中出现的所有某一指定值。replaceAll()
        Collections.replaceAll(list,6,7);
        System.out.println("------------------------------------");
        System.out.println(list);

        //将集合中的元素进行调换  swap()
        Collections.swap(list,0,5);
        System.out.println("------------------------------------");
        System.out.println(list);

        //将集合元素顺序打乱输出  shuffle()
        Collections.shuffle(list);
        System.out.println("------------------------------------");
        System.out.println(list);

        //查询集合的最大值和最小值 max()  min()
        int max = Collections.max(list);
        int min = Collections.min(list);
        System.out.println("------------------------------------");
        System.out.println(max);
        System.out.println(min);

        //使用默认的排序方法进行集合元素的排序：自然排序(从小到大) sort()
        Collections.sort(list);
        System.out.println("------------------------------------");
        System.out.println(list);

        //创建一个新的集合
        List<Integer> list1 = new ArrayList<>();
        Random random = new Random();
        //使用原始的方法为集合添加元素
        for (int i = 0;i<3;i++){
            list1.add(random.nextInt(20));
        }

        //将指定集合中的元素复制到指定集合中 copy()
        //注意copy方法复制的元素会将原集合从第一个的元素开始覆盖掉
        Collections.copy(list,list1);
        System.out.println("------------------------------------");
        System.out.println(list1);
        System.out.println(list);

        //使用指定的值取替换集合中所有的元素 fill(）
        Collections.fill(list,0);
        System.out.println("------------------------------------");
        System.out.println(list);

    }
}
